<?php 
class venda_empresaModel extends Model{
    public $tabela = "venda_empresa";
    public $pkey   = 'venda_empresa_cod';
    public $model_label       = "Empresa";
    public $model_description = "
        As empresas possuem <b>funcionários</b> e estes são os potenciais <b>Clientes</b> do sistema
    ";
    
    public $dados  = array(
         'venda_empresa_cod' => array(
	    'name'     => 'Código',
	    'type'     => 'int',
	    'size'     => '11',
	    'pkey'    => true,
	    'ai'      => true,
	    'grid'    => true,
	    'display' => true,
	    'private' => true
        ),
        
        'venda_empresa_nome' => array(
	    'name'     => 'Nome Fantasia',
	    'type'     => 'varchar',
	    'size'     => '32',
            'unique'   => array('model' => 'venda/empresa'),
	    'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
        /*
        'venda_equipe_cod' => array(
	    'name'     => 'Equipe',
	    'type'     => 'int',
	    'size'     => '11',
            'especial' => 'session',
            'session' => 'venda/equipe',
	    'grid'    => true,
	    'display' => true,
            'notnull' => true,
	    'fkey' => array(
	        'model' => 'venda/equipe',
	        'cardinalidade' => '1n',
	        'keys' => array('venda_equipe_cod', 'venda_equipe_nome'),
                'onupdate' => 'cascade',
                'ondelete' => 'restrict',
	    ),
        ),
        */
        'venda_empresa_cnpj' => array(
	    'name'     => 'Cnpj',
	    'type'     => 'varchar',
	    'size'     => '18',
            //'especial' => 'cnpj',
	    //'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
         'venda_empresa_razsocial' => array(
	    'name'     => 'Razão Social',
	    'type'     => 'varchar',
	    'size'     => '128',
        ),
         'venda_empresa_inscmunicipal' => array(
	    'name'     => 'Inscrição Municipal',
	    'type'     => 'varchar',
	    'size'     => '128',
        ),
         'venda_empresa_inscestatual' => array(
	    'name'     => 'Inscrição Estatual',
	    'type'     => 'varchar',
	    'size'     => '128',
        ),
        
        'venda_empresa_criado' => array(
	    'name'     => 'Data do registro',
	    'type'     => 'timestamp',
            'especial' => 'hide',
	    'grid'    => true,
	    'display' => true,
        ),
        
        'cod_usuario' => array(
	    'name'     => 'Quem cadastrou',
	    'type'     => 'int',
	    'size'     => '11',
	    'pkey'    => true,
	    'grid'    => true,
            'especial' => 'autentication',
            'autentication' => array(
                'needlogin' => true
            ),
	    'display' => true,
	    'fkey' => array(
	        'model' => 'usuario/login',
	        'cardinalidade' => '1n',
	        'keys' => array('cod_usuario', 'user_name', 'user_cargo'),
	    ),
        ),
        

        'venda_empresa_funcionario' => array(
            'name'          => 'Funcionários',
            //'private'       => true,    
            'especial'      => 'hide',
            'display'       => true,
            'display_in'    => 'table',
            'fkey'      => array(
                'sort'          => 'venda_funcionario_nome ASC',
                'limit'         => 10,
                'model' 	=> 'venda/funcionario',
                'keys'          => array('venda_funcionario_cod', 'venda_funcionario_nome'),
                'cardinalidade' => 'n1'//nn 1n 11
            )
         ),

        'venda_empresa_visita' => array(
            'name'          => 'Visitas',
            //'private'       => true,    
            'especial'      => 'hide',
            'display'       => true,
            'display_in'    => 'table',
            'fkey'      => array(
                'sort'          => 'venda_visita_criado DESC',
                'limit'         => 10,
                'model' 	=> 'venda/visita',
                'keys'          => array('venda_visita_cod', 'venda_visita_criado'),
                'cardinalidade' => 'n1'//nn 1n 11
            )
         ),
        
        'pessoal_endereco_cod' => array(
            'fieldset' => "Endereço da Empresa",
            'name' => 'Endereço',
            'notnull' => true,
            //'display' => true,
            'fkey' => array(
	        'model'         => 'pessoal/endereco',
	        'cardinalidade' => '11',
	        'keys' => array('pessoal_endereco_cod', 'pessoal_endereco_bairro', 'pessoal_endereco_cidade'),
	    ),
        ),

        'venda_empresa_status' => array(
	    'name'     => 'Status',
	    'type'     => 'enum',
	    'default' => 'unsaved',
	    'options' => array(
	    	'saved'   => 'Salvo',
	    	'unsaved' => 'Não salvo',
	    ),
            'private' => true,
	    'notnull' => true,
        ),
        
        
        
	'button'     => array('button' => 'Gravar Empresa'),
     );
    /*
    public function selecionar($campos = array(), $where = "", $limit = "", $offset = "", $orderby = "") {
        
        if(defined('PERMISSION') && PERMISSION == "s"){
            $this->LoadModel('venda/equipe', 'eq');
            $cod    = $this->eq->getActiveEventOfUser(usuario_loginModel::CodUsuario());
            $wh     = ($cod != "")? "venda_equipe_cod = '$cod'":"";
            $where  = ($where == "")?$wh:"$wh AND $where";
            die($where);
        }
        
        $var = parent::selecionar($campos, $where, $limit, $offset, $orderby);
        return $var;
    }*/

    public function getByEquipe($cod_equipe, $page, $link, $qtd){
        $this->LoadModel('venda/visita', 'vis');
        $tabela = $this->vis->getTable();
        $this->db->Join($this->getTable(), $this->vis->getTable(), array('venda_empresa_cod'), array('venda_empresa_cod'), "LEFT");
        $where = "$tabela.venda_equipe_cod = '$cod_equipe'";
        $campos = $this->getCampos();
        $campos[0] = 'DISTINCT '.$campos[0];
        return $this->paginate($page, $link, '', '', $qtd, $campos, $where);
    }
    
    
    public function createEmpty(){
        $id = $this->getLastId();
        $cod_usuario                 = usuario_loginModel::CodUsuario();
        $dados['venda_empresa_nome'] = 'Nova Empresa '.($id+1);
        $dados['cod_usuario']        = $cod_usuario;
        
        $wh = "cod_usuario = '$cod_usuario' AND venda_empresa_status = 'unsaved'";
        $var = $this->selecionar(array('venda_empresa_cod'), $wh);
        if(empty($var)){
            if(!$this->inserir($dados)) return false;
            return $this->getLastId();
        }
        $var = array_shift($var);
        return $var['venda_empresa_cod'];
    }
    
    public function paginate($page, $link = "", $cod_item = "", $campo = "", $qtd = 20, $campos = array(), $adwhere = "", $orderby = "") {
        $where = ($adwhere == "")?"":"$adwhere AND ";
        $adwhere = "$where venda_empresa_status = 'saved'";
        return parent::paginate($page, $link, $cod_item, $campo, $qtd, $campos, $adwhere, $orderby);
    }
    
    public function checkaddress($address){
        
        $this->LoadModel('pessoal/endereco', 'end');
        $dados = $this->end->getDados();
        $query = array("venda_empresa_status != 'unsaved'");
        if(isset($address['pessoal_endereco_cod'])) unset($address['pessoal_endereco_cod']);
        if(isset($dados['pessoal_pessoa_cod']))     unset($dados['pessoal_pessoa_cod']);
        foreach($address as $name => $val){
            if(!array_key_exists($name, $dados)) continue;
            $name  = $this->antinjection($name);
            $val   = $this->antinjection($val);
            $query[] = "$name = '$val'";
        }
        
        $qr = implode(" AND ", $query);
        $tb = $this->end->getTable();
        $this->db->Join($this->tabela, $tb);
        
        if($this->getCount("$qr") != 0){
            $this->db->Join($this->tabela, $tb);
            $var = $this->selecionar(array('venda_empresa_cod'), $qr, 1);
            $var = array_shift($var);
            return $var['venda_empresa_cod'];
        }
        return false;
    }
    
    public function editar($id, $post, $camp = "") {
        $post['venda_empresa_status'] = 'saved';
        $old = $this->getItem($id);
        $cod = $this->checkaddress($post);
        if($cod !== false && $cod != $id){
            $this->LoadResource('html', 'html');
            $erro = "Já existe uma empresa cadastrada neste endereço. Para acessar esta empresa " .
                    $this->html->getActionLinkIfHasPermission("venda/empresa/show/$cod", 
            'clique aqui').".";
            $this->setErrorMessage($erro);
            return false;
        }
        if(!parent::editar($id, $post, $camp)) return false;
        if(empty($old)) return true;
        
        $msg = $this->genLogMessage($post, $old);
        $this->saveLog($msg);
        return true;
    }
    
    /*
     * Responsável por gerar a mensagem de log
     */
    private function genLogMessage($post, $old){
        
        if(isset($post['venda_empresa_status'])) unset($post['venda_empresa_status']);
        if(isset($post['cod_usuario']))          unset($post['cod_usuario']);
        
        $msg = "";
        foreach($post as $name => $arr){
            if(!array_key_exists($name, $this->dados)) continue;
            if(is_array($arr)) continue;
            if($old[$name] == $arr) continue;
            $title = $this->dados[$name]['name'];
            $msg .= "<b>$title</b>: $arr <br/>";
        }
        
        if($msg == "") return "";
        if($old['venda_empresa_status'] != "saved") $msg = "Empresa Adicionada <br/> $msg";
        else $msg = "Modificações na empresa:<br/> $msg";
        return $msg;
    }
    
    private function saveLog($msg){
        if($msg == "") return;
        $this->LoadModel('venda/empresalog', 'elog');
        if(!$this->elog->Log($msg))
            $this->setAlertMessage($this->elog->getErrorMessage());
    }
    
}
?>